package org.example.demo3.demos.web.enums;

import lombok.Getter;

@Getter
public enum CommonEnum {

    // 开票方纳税人状态
    ENTERPRISE_INFO_STATUS_01("01", "受理"),
    ENTERPRISE_INFO_STATUS_02("02", "筹建期"),
    ENTERPRISE_INFO_STATUS_03("03", "正常"),
    ENTERPRISE_INFO_STATUS_04("04", "停业"),
    ENTERPRISE_INFO_STATUS_05("05", "非正常"),
    ENTERPRISE_INFO_STATUS_06("06", "清算"),
    ENTERPRISE_INFO_STATUS_07("07", "注销"),
    ENTERPRISE_INFO_STATUS_08("08", "非正常户注销"),
    ENTERPRISE_INFO_STATUS_09("09", "报验"),
    ENTERPRISE_INFO_STATUS_10("10", "核销报验"),
    ENTERPRISE_INFO_STATUS_11("11", "中断缴费"),
    ENTERPRISE_INFO_STATUS_12("12", "恢复缴费"),
    ENTERPRISE_INFO_STATUS_13("13", "简易注销无异议"),
    ENTERPRISE_INFO_STATUS_99("99", "其他"),

    // 00：非风险纳税人 01：Ⅰ类（高风险）纳税人 02：Ⅱ类（中风险）纳税人 03：Ⅲ类（低风险）纳税人 04：Ⅳ类（无风险）纳税人
    RISK_TYPE_00("00", "非风险纳税人"),
    RISK_TYPE_01("01", "Ⅰ类（高风险）纳税人"),
    RISK_TYPE_02("02", "Ⅱ类（中风险）纳税人"),
    RISK_TYPE_03("03", "Ⅲ类（低风险）纳税人"),
    RISK_TYPE_04("04", "Ⅳ类（无风险）纳税人"),

    // 纳税人预警级别; 00：无预警 01：红色预警 02：黄色预警 03：蓝色预警
    RISK_WARNING_LEVEL_00("00", "无预警"),
    RISK_WARNING_LEVEL_01("01", "红色预警"),
    RISK_WARNING_LEVEL_02("02", "黄色预警"),
    RISK_WARNING_LEVEL_03("03", "蓝色预警"),

    // 风险纳税人标志;Y：风险纳税人 N：正常纳税人
    RISK_FLAG_Y("Y", "风险纳税人"),
    RISK_FLAG_N("N", "正常纳税人"),

    // 特定要素
    TDYS_01("01", "成品油发票"),
    TDYS_02("02", "稀土发票"),
    TDYS_03("03", "建筑服务发票"),
    TDYS_04("04", "货物运输服务发票"),
    TDYS_05("05", "不动产销售服务发票"),
    TDYS_06("06", "不动产租赁服务发票"),
    TDYS_07("07", "代收车船税"),
    TDYS_08("08", "通行费"),
    TDYS_09("09", "旅客运输服务发票"),
    TDYS_10("10", "医疗服务（住院）发票"),
    TDYS_11("11", "医疗服务（门诊）发票"),
    TDYS_12("12", "自产农产品销售发票"),
    TDYS_13("13", "拖拉机及联合收割机发票"),
    TDYS_14("14", "机动车"),
    TDYS_15("15", "二手车"),
    TDYS_16("16", "农产品收购发票"),
    TDYS_17("17", "光伏收购发票"),
    TDYS_18("18", "卷烟发票"),

    // 发票状态 0：正常，2：作废，3：已红冲，7：部分红冲，8：全额红冲
    INVOICE_STATUS_0("0", "正常"),
    INVOICE_STATUS_2("2", "作废"),
    INVOICE_STATUS_3("3", "已红冲"),
    INVOICE_STATUS_7("7", "部分红冲"),
    INVOICE_STATUS_8("8", "全额红冲"),

    // 发票用途
    INVOICE_USE_0("0", "未使用"),
    INVOICE_USE_1("1", "已申请抵扣"),
    INVOICE_USE_2("2", "已申请退税"),
    INVOICE_USE_3("3", "已申请代办退税"),
    INVOICE_USE_4("4", "已勾选不抵扣（历史数据）"),
    INVOICE_USE_5("5", "已申请代办退税（历史数据）"),
    INVOICE_USE_6("6", "已申请不抵扣"),
    INVOICE_USE_7("7", "内销转出口"),
    INVOICE_USE_8("8", "出口转内销"),
    INVOICE_USE_9("9", "准予退税"),
    INVOICE_USE_10("10", "不予退税"),
    INVOICE_USE_11("11", "冬奥退税"),

    // 发票入账状态
    INVOICE_RECORD_01("01", "未入账"),
    INVOICE_RECORD_02("02", "已入账"),
    INVOICE_RECORD_03("03", "已入账撤销"),

    // 消费税用途
    XFSYT_00("00", "未勾选库存"),
    XFSYT_01("01", "已勾选库存"),

    // 异常凭证状态 01：正常 02：异常凭证 03：疑似异常凭证
    YCPZZT_01("01", "正常"),
    YCPZZT_02("02", "异常凭证"),
    YCPZZT_03("03", "疑似异常凭证"),

    // 红字锁定标识 Y：锁定 N：未锁定
    HZSDBS_Y("Y", "锁定"),
    HZSDBS_N("N", "未锁定"),

    // 蓝字发票标志; 0：蓝字发票 1：红字发票
    INVOICE_BLUE("0", "蓝字发票"),
    INVOICE_RED("1", "红字发票"),

    // 数电开票状态 0：未开票 2：开票成功 3：开票失败
    KPZT_0("0", "未开票"),
    KPZT_2("2", "开票成功"),
    KPZT_3("3", "开票失败"),

    // 乐企发票上传状态;0：未上传 1：上传中 2：已上传 3：上传失败
    INVOICE_UPLOAD_STATUS_0("0", "未上传"),
    INVOICE_UPLOAD_STATUS_1("1", "上传中"),
    INVOICE_UPLOAD_STATUS_2("2", "已上传"),
    INVOICE_UPLOAD_STATUS_3("3", "上传失败"),

    // 乐企发票上传结果;00：上传成功 01：发票上传处理中 02：上传失败 03：重复上传
    UPLOAD_RESULT_00("00", "上传成功"),
    UPLOAD_RESULT_01("01", "发票上传处理中"),
    UPLOAD_RESULT_02("02", "上传失败"),
    UPLOAD_RESULT_03("03", "重复上传"),

    // 录入方身份 0：销方 1：购方
    LRFSF_XSF("0", "销方"),
    LRFSF_GMF("1", "购方"),

    // 是否纸质发票标志 Y：是，N：否
    SFZZFP_YES("Y", "是"),
    SFZZFP_NO("N", "否"),

    // 已开具红字发票标志 Y：已开具，N：未开具
    YKJHZFP_YES("Y", "已开具"),
    YKJHZFP_NO("N", "未开具"),

    // 红字发票冲红原因代码;01：开票有误 02：销货退回 03：服务中止 04：销售折让
    CHYY_01("01", "开票有误"),
    CHYY_02("02", "销货退回"),
    CHYY_03("03", "服务中止"),
    CHYY_04("04", "销售折让"),

    // 红字确认单审批流程类型
    HZQRD_APPROVAL_TYPE_0("0", "红字确认单申请"),
    HZQRD_APPROVAL_TYPE_1("1", "红字确认单确认"),

    // 判断红字确认单来源
    HZQRD_SOURCE_0("0", "我发出的红字确认单"),
    HZQRD_SOURCE_1("1", "我收到的红字确认单"),

    // 红字确认单有效标志 Y：有效，N：无效
    HZQRD_YXBZ_YES("Y", "有效"),
    HZQRD_YXBZ_NO("N", "无效"),

    // 红字确认信息状态代码
    HZQRD_STATUS_01("01", "无需确认"),
    HZQRD_STATUS_02("02", "销方录入待购方确认"),
    HZQRD_STATUS_03("03", "购方录入待销方确认"),
    HZQRD_STATUS_04("04", "购销双方已确认"),
    HZQRD_STATUS_05("05", "作废（销方录入购方否认）"),
    HZQRD_STATUS_06("06", "作废（购方录入销方否认）"),
    HZQRD_STATUS_07("07", "作废（超72小时未确认）"),
    HZQRD_STATUS_08("08", "（发起方撤销）"),
    HZQRD_STATUS_09("09", "作废（确认后撤销）"),
    HZQRD_STATUS_10("10", "作废（异常凭证）"),

    // 红字确认单确认类型：Y 同意 N 不同意 C 撤销
    HZQRD_QRLX_Y("Y", "同意"),
    HZQRD_QRLX_N("N", "不同意"),
    HZQRD_QRLX_C("C", "撤销"),

    // 发票类型
    INVOICE_TYPE_01("01", "数电专票"),
    INVOICE_TYPE_02("02", "数电普票"),
    INVOICE_TYPE_004("004", "增值税专用发票"),
    INVOICE_TYPE_007("007", "增值税普通发票"),
    INVOICE_TYPE_026("026", "电子普通发票"),

    // 是否不动产发票
    SFBDC_NO("0", "否"),
    SFBDC_YES("1", "是"),

    // 发票行性质;00：正常行 01：折扣行 02：被折扣行
    FPHXZ_00("00", "正常行"),
    FPHXZ_01("01", "折扣行"),
    FPHXZ_02("02", "被折扣行"),

    // 税率

    /**
     * 数据来源;0：交易数据开票 1：手工申请 2：官网开票
     */

    DATA_SOURCE_0("0", "交易数据开票"),
    /**
     * 数据来源;0：交易数据开票 1：手工申请 2：官网开票
     */
    DATA_SOURCE_1("1", "手工申请"),
    /**
     * 数据来源;0：交易数据开票 1：手工申请 2：官网开票
     */
    DATA_SOURCE_2("2", "官网开票"),
    DATA_SOURCE_99("99", "web端开具发票"),

    // 删除状态;0-正常，1-删除
    DEL_STATUS_0("0", "正常"),
    DEL_STATUS_1("1", "删除"),

    // 匹配状态 0：未完全匹配，1：已完全匹配，-1：无需匹配，且只针对手工开票数据
    MATCHING_STATUS_0("0", "未完全匹配"),
    MATCHING_STATUS_1("1", "已完全匹配"),
    MATCHING_STATUS_2("-1", "无需匹配，且只针对手工开票数据"),

    // 金额模式 01：不含税 02：含税
    AMOUNT_MODE_01("01", "不含税"),
    AMOUNT_MODE_02("02", "含税"),

    // 征税方式;0：普通征税，2：差额征税
    TAXATION_METHOD_0("0", "普通征税"),
    TAXATION_METHOD_2("2", "差额征税"),

    // 差额征税-全额征税 差额征税-差额征税
    CEZS_01("01", "全额征税"),
    CEZS_02("02", "差额征税"),

    // 业务开关类型
    BUSINESS_SWITCH_TYPE_01("01", "版式文件"),
    BUSINESS_SWITCH_TYPE_02("02", "发票开具"),

    /**
     * 购买方自然人标志：01是
     */
    PERSON_FLAG_01("01", "是"),
    /**
     * 购买方自然人标志： 02否
     */
    PERSON_FLAG_02("02", "否"),

    // 授信额度申请类型
    CREDIT_LIMIT_APPLY_TYPE_0("0", "下载"),
    CREDIT_LIMIT_APPLY_TYPE_1("1", "退回"),


    // 不动产区域等级
    REGION_LEVEL_1("1", "省级"),
    REGION_LEVEL_2("2", "市级"),


    // 乐企接口返回结果
    LEQI_RETURN_CODE_SUCCESS("01","成功"),
    LEQI_RETURN_CODE_FAIL("02","失败"),


    // 调用校验方法的来源 0：手工开票校验 1：Excel导入校验 2：公共开票接口校验
    CHECK_SOURCE_0("0", "手工开票校验"),
    CHECK_SOURCE_1("1", "Excel导入校验"),
    CHECK_SOURCE_2("2", "公共开票接口校验"),


    /**
     * 差额开票-差额扣除信息凭证类型;
     * 01：数电票 02：增值税专用发票 03：增值税普通发票 04：营业税发票 05：财政票据
     * 06：法院裁决书 07：契税完税凭证 08：其他发票类 09：其他扣除凭证
     */
    CEKC_PZLX_01("01", "数电票"),
    CEKC_PZLX_02("02", "增值税专用发票"),
    CEKC_PZLX_03("03", "增值税普通发票"),
    CEKC_PZLX_04("04", "营业税发票"),
    CEKC_PZLX_05("05", "财政票据"),
    CEKC_PZLX_06("06", "法院裁决书"),
    CEKC_PZLX_07("07", "契税完税凭证"),
    CEKC_PZLX_08("08", "其他发票类"),
    CEKC_PZLX_09("09", "其他扣除凭证"),


    // 数据类型 1 进项票；2 销项票
    SJLX_JX("1", "进项票"),
    SJLX_XX("2", "销项票"),

    // 税控发票状态 1：正常，2：作废，3：红冲
    SK_INVOICE_STATUS_1("1", "正常"),
    SK_INVOICE_STATUS_2("2", "作废"),
    SK_INVOICE_STATUS_3("3", "红冲"),


    // 数据库来源 1 进项票、2 税控票、3 数电票
    SJKLY_JX("1", "进项票"),
    SJKLY_SK("2", "税控票"),
    SJKLY_SD("3", "数电票"),

    // 发票匹配流水类型 0：发票匹配流水 1：发票匹配流水撤销
    MATCH_FLOW_TYPE_0("0", "发票匹配流水"),
    MATCH_FLOW_TYPE_1("1", "发票匹配流水撤销"),

    // 发票明细的匹配状态
    ITEM_PPZT_0("0", "未匹配"),
    ITEM_PPZT_1("1", "已匹配"),

    // 拆分合并状态
    SPLIT_MERGE_STATUS_1("1", "未拆分合并"),
    SPLIT_MERGE_STATUS_2("2", "拆分"),
    SPLIT_MERGE_STATUS_3("3", "合并"),

    // 流水拆分合并关联表类型
    SPLIT_MERGE_TYPE_1("1", "拆分"),
    SPLIT_MERGE_TYPE_2("2", "合并"),

    //合并条件 （预合并和合并时入参中使用）
    MERGE_QUERY_CONDITION_0("0", "合并条件：业务编号"),
    MERGE_QUERY_CONDITION_1("1", "合并条件：投保单号"),

    //合并方式 （预合并和合并时入参中使用）0：按险种代码合并(税率一样的情况下)，1：按税率合并
    MERGE_MODE_0("0", "按险种代码合并"),
    MERGE_MODE_1("1", "按税率合并"),
    //流水性质
    LSXZ_1("1", "蓝字"),
    LSXZ_2("2", "红字"),

    // 负数流水管理 是否关注 0否 1是
    NEGATIVE_FLOW_MANAGE_0("0", "否"),
    NEGATIVE_FLOW_MANAGE_1("1", "是"),

    // 负数流水操作状态 0未处理 1已处理 入库默认填写0
    NEGATIVE_FLOW_STATUS_0("0", "未处理"),
    NEGATIVE_FLOW_STATUS_1("1", "已处理"),

    // 流水开票状态：0：锁定 ，1未开票，2部分开票，3全部开票，4冲红处理
    FLOW_INVOICE_STATUS_0("0", "锁定"),
    FLOW_INVOICE_STATUS_1("1", "未开票"),
    FLOW_INVOICE_STATUS_2("2", "部分开票"),
    FLOW_INVOICE_STATUS_3("3", "全部开票"),
    FLOW_INVOICE_STATUS_4("4", "冲红处理"),

    // 前端查看流水拆分合并 弹窗类型
    SPLIT_MERGE_POPUP_TYPE_1("edit", "编辑"),
    SPLIT_MERGE_POPUP_TYPE_2("detail", "查看"),


    ;

    CommonEnum(String key, String value) {
        this.key = key;
        this.value = value;
    }

    private final String key;
    private final String value;

    public static String getValue(String key) {
        for (CommonEnum c : CommonEnum.values()) {
            if (c.getKey().equals(key)) {
                return c.getValue();
            }
        }
        return null;
    }

}

